/* 
 * MovimentacaoViaturaEvent.java
 * 
 * Data de criação: 30/10/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.integration.event;

import java.util.Date;

import javax.persistence.PostPersist;

import br.com.o2solutions.siso.integration.entidade.Viatura;
import br.com.o2solutions.siso.integration.entidade.ViaturaUnidadeOperacional;
import br.com.o2solutions.util.bean.BeanUtil;

/**
 * Classe responsável por realizar a interceptação dos eventos de persistência e
 * atualização sobre o objeto viatura e, caso necessário, alterar o registro de
 * vinculação entre viatura e unidade operacional a fim de manter o histórico
 * sobre a movimentação da viatura.
 * 
 * @author Osvaldeir
 * @since 30/10/2010
 * 
 */
public class MovimentacaoViaturaEvent {

	/**
	 * Verifica se a viatura possui uma Unidade Operacional e, caso positivo,
	 * registra o vinculo entre os objetos no objeto relacional
	 * {@link ViaturaUnidadeOperacional}.Prérrequisito: A viatura não pode ter
	 * nenhum vinculo com qualquer unidade operacional.
	 * 
	 * @param viatura
	 *            Viatura que está sendo persistida.
	 */
	@PostPersist
	public void postPersist(final Viatura viatura) {
		boolean isVinculada = !BeanUtil.isNull(viatura.getUnidadeOperacional())
				&& !BeanUtil.isNull(viatura.getUnidadeOperacional().getId());
		if (isVinculada) {
			final ViaturaUnidadeOperacional historic = new ViaturaUnidadeOperacional(viatura, viatura
					.getUnidadeOperacional());
			historic.setDataAquisicao(new Date());
			viatura.getHistorico().add(
					historic);
		}
	}
}
